// pages/shoppingcart/shoppingcart.js
const app = getApp()
Page({

  /**
   * 页面的初始数据
   */
  data: {
    // 头部导航栏的高度
    statusBarHeight: app.globalData.statusBarHeight,
    // 购物车数据
    cartList:null,
    // 店铺复选
    checked: true,
    // 购物车商品总数量
    cartProductNum:0,
    // 商品总金额
    totalMoney:0,
    // 购物车长度
    cartLength:0,
     // 购物车是否为空
     isCartNull:true,
    // 是否显示删除所选按钮
    isEdit:false,
    // 是否全选
    isAllSelect:true
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {},

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    // 获取购物车数据,判断是否有商品
    console.log(wx.getStorageSync('cart'));
    if(wx.getStorageSync('cart')==''){

      // 更新数据
      this.setData({
        isCartNull:true,
      })

      // 购物车不是空的
    }else{
       // 遍历购物车数组 计算总价
       let cart = wx.getStorageSync('cart')
       cart.forEach(item=>{
         this.setData({
           // 商品总数
           cartProductNum:this.data.cartProductNum+=item.count,
           // 商品总金额
           totalMoney:this.data.totalMoney+=Number(item.count) * Number(item.currentPrice),
         })
       })

       // 为商品添加一个单选属性
       cart.forEach(item=>{
         item.isCheck = true
       })
       wx.setStorageSync('cart', cart)

      //  更新数据
      this.setData({
        isCartNull:false,
        cartList:wx.getStorageSync('cart'),
        // 进入页面全选
        isAllSelect:true,

      })
    }
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {
    // 清除数据
    this.setData({
      cartProductNum:0,
      totalMoney:0
    })
  },



  // 计算总价
  getTotalPrice(){
    // 获取购物车列表
    let cart = this.data.cartList;
    let totalPrice = 0
    // 遍历购物车数据,计算选中的商品的总金额
    for(let i=0;i<cart.length;i++){
      if(cart[i].isCheck){
        totalPrice+=cart[i].count * Number(cart[i].currentPrice)
      }
    }
    // 更新数据
    this.setData({
      cartList:cart,
      totalMoney:totalPrice
    })
  },


  // 全选
  allSelect(){
    // 全选状态
    let isAllSelect = this.data.isAllSelect
    isAllSelect = !isAllSelect
    // 购物车数据
    let cart = this.data.cartList
  //  遍历列表商品,修改全部选中状态
    cart.forEach((item,index)=>{
     item.isCheck = isAllSelect
   })
  //  更新数据
  this.setData({
    cartList:cart,
    isAllSelect
  })
  // 计算总价
  this.getTotalPrice()
  },

  // 单个商品勾选
  selectOen(e){
    // console.log(e);
    // 获取购物车列表
    let cart = this.data.cartList
    // 获取当前商品的下标
    let index = e.target.dataset.index
    // 保存选中的个数
    let count = 0
    // 取反
    cart[index].isCheck = !cart[index].isCheck
    // 计算选中的单个商品数量,全部选中修改全选状态
    for(let i=0;i<cart.length;i++){
      if(cart[i].isCheck){
        count++
        if(count==cart.length){
          this.data.isAllSelect = true
        }
        // 没有全部选中则取消全选
      }else{
        this.data.isAllSelect =false
      }
    }
    // 更新数据
    this.setData({
      cartList:cart,
      isAllSelect:this.data.isAllSelect,
    })
  
    // 重新计算总价
    this.getTotalPrice()
  },

  // 跳首页
  goHome(){
    wx.switchTab({
      url: '../home/home',
    })
  },

  // 商品数量增加
  addCount(e){
    // console.log(e);   
    // e.target.dataset.index 

    // 商品总数加一
      this.data.cartProductNum+=1;
      // 商品总价加上当前商品的单价
      this.data.totalMoney+=Number(this.data.cartList[e.target.dataset.index].currentPrice),
      this.data.totalMoney = Number(this.data.totalMoney.toFixed(2))
      // 购物车数据内的对应项数量加一 并赋回给购物车数据
      this.data.cartList[e.target.dataset.index].count = ++this.data.cartList[e.target.dataset.index].count;
      // 更新数据
      this.setData({
        cartProductNum:this.data.cartProductNum,
        totalMoney:this.data.totalMoney,
        cartList:this.data.cartList
      })
      // 将修改后的购物车数据存入本地
      try{
        wx.setStorageSync('cart', this.data.cartList)
      } catch(e){
        console.log("增加商品数量出错",e);
      }
  },

  // 商品数量减少
  delCount(e){
    // 如果该商品数量为1,则不做操作,这里使用vant组件,数量为1时,减少按钮被禁用
    // if(this.data.cartList[e.target.dataset.index].count===1){
    //   return
    // }
    // 商品总数减一
    this.data.cartProductNum-=1;
    // 商品总价减去当前商品的单价
    this.data.totalMoney-=Number(this.data.cartList[e.target.dataset.index].currentPrice),
    this.data.totalMoney = Number(this.data.totalMoney.toFixed(2))
    // 购物车数据内的对应项数量减一 并赋回给购物车数据
    this.data.cartList[e.target.dataset.index].count = -- this.data.cartList[e.target.dataset.index].count
    // 更新购物车数据
    this.setData({
      cartProductNum:this.data.cartProductNum,
      totalMoney:this.data.totalMoney,
      cartList:this.data.cartList
    })
    // 将修改后的购物车数据存入缓存
    try{
      wx.setStorageSync('cart', this.data.cartList)
    } catch(e){
      console.log("减少商品数量出错",e);
    }
  },

  // 删除某个商品
  delProduct(e){
    wx.showModal({
      cancelText:'再想想',
      cancelColor:"#FF4D00",
      content: '确定删除该商品吗',
      complete: (res) => {
        if (res.cancel) {
       return
        }
    
        if (res.confirm) {
            // 商品总数减去当前项的数量
    this.data.cartProductNum = this.data.cartProductNum - this.data.cartList[e.target.dataset.index].count
    // 商品总金额减去当前项的数量*单价
    
    this.data.totalMoney -= this.data.cartList[e.target.dataset.index].count * this.data.cartList[e.target.dataset.index].currentPrice;
    // 删除购物车数据中当前项的数据
    this.data.cartList.splice(e.target.dataset.index,1)
    // 购物车商品数量
    // this.data.cartProductNum = this.data.cartList.length
    // 更新数据
    this.setData({
      cartProductNum:this.data.cartProductNum,
      totalMoney:this.data.totalMoney,
      cartList:this.data.cartList,
    })
    // 将修改后的数据存入本地
    try{
      wx.setStorageSync('cart', this.data.cartList)
    } catch(e){
      console.log("删除某个商品出错",e);
    }
    // 判断商品列表是否为空,为空就把缓存删除
    if(wx.getStorageSync('cart')==''){
      wx.removeStorage({
        key: 'cart',
      })
      setTimeout(()=>{
        this.setData({
          isCartNull:true
        })
      },100)
    }
        }
      }
    })
    
  },
  // 删除所选
  delSelect(){
    // 选中的商品id数组
      let ids = []
    // 获取购物车数据
    let cart = this.data.cartList
    for(let i=0;i<cart.length;i++){
      if(cart[i].isCheck){
        // 获取选中的商品id
        ids.push(cart[i].productId)
      }
    }
    // 判断选择的商品id与购物车id是否相同
    ids.forEach(id=>{
      for(let i=0;i<cart.length;i++){

        if(id===cart[i].productId){
          // 删除
          cart.splice(i,1)
        }
      }
    })
    // 更新数据
    this.setData({
      cartList:cart
    })

    wx.setStorageSync('cart', this.data.cartList)
    // 删完
    if(this.data.cartList.length===0){
      this.setData({
        isCartNull:true
      })
    }
  // 重新计算总价
  this.getTotalPrice()

  },

  // 点击编辑事件
  edit(){
    // 取消全选
    let cart = wx.getStorageSync('cart')
    for(let i=0;i<cart.length;i++){
      cart[i].isCheck = false
    }
    this.setData({
      isEdit:true,
      cartList:cart,
      isAllSelect:false
    })
  },
  ok(){
    this.setData({
      isEdit:false
    })
  },
  // 去结算
  goClose(){
    // 总价总数存入缓存
    let total = [
      {
        totalMoney:this.data.totalMoney,
        cartProductNum:this.data.cartProductNum
      }
    ]
    wx.setStorageSync('total', total)
    wx.navigateTo({
      // url: '../close/close?totalMoney='+this.data.totalMoney+'&cartProductNum='+this.data.cartProductNum,
      url:'../close/close'
    })
  }

})